package com.hspedu.generic;

import java.util.ArrayList;
import java.util.List;

/**
 * @author LiuJinTao
 * @className GenericExtends
 * @date 2024/06/19 22:36
 * @description TODO
 */
public class GenericExtends {
    public static void main(String[] args) {
        ArrayList<Object> list1 = new ArrayList<>();
        ArrayList<String> list2 = new ArrayList<>();
        ArrayList<AA> list3 = new ArrayList<>();
        ArrayList<BB> list4 = new ArrayList<>();
        ArrayList<CC> list5 = new ArrayList<>();

        printCollection1(list1);
        printCollection1(list2);
        printCollection1(list3);
        printCollection1(list4);
        printCollection1(list5);

        printCollection2(list3);
        printCollection2(list4);
        printCollection2(list5);

        printCollection3(list1);
        printCollection3(list3);
    }

    public static void printCollection1(List<?> c) {
        for (Object o : c) {// 通配符取出时就是 Object
            System.out.println(o);
        }
    }

    // ? extends AA 表示 上限，可以接受 AA 或者 AA 子类
    public static void printCollection2(List<? extends AA> c) {
        for (Object o : c) {
            System.out.println(o);
        }
    }

    // ? super AA 表示 下限，可以接受 AA 或者 AA 父类
    public static void printCollection3(List<? super AA> c) {
        for (Object o : c) {
            System.out.println(o);
        }
    }
}

class AA {}

class BB extends AA {}

class CC extends BB {}